﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace OpGen.Compiler.Parser
{
    /// <summary>
    /// Auflistung mit Parser Meldungen
    /// </summary>
    public class MessageItemCollection : IEnumerable<MessageItem>
    {
        private List<MessageItem> _list = new List<MessageItem>();

        /// <summary>
        /// Fügt eine neue Meldung hinzu
        /// </summary>
        /// <param name="element"></param>
        public void Add(MessageItem element)
        {
            _list.Add(element);
        }

        /// <summary>
        /// Entfernt eine Meldung
        /// </summary>
        /// <param name="element"></param>
        public void Remove(MessageItem element)
        {
            _list.Remove(element);
        }

        /// <summary>
        /// Liefert eine Meldung anhand des Index
        /// </summary>
        /// <param name="index"></param>
        /// <returns></returns>
        public MessageItem this[int index]
        {
            get { return _list[index]; }
            set { _list[index] = value; }
        }

        /// <summary>
        /// Liefert die Anzahl der Meldungen
        /// </summary>
        public int Count
        {
            get { return _list.Count; }
        }

        /// <summary>
        /// Löscht die Liste mit den Meldungen
        /// </summary>
        public void Clear()
        {
            _list.Clear();
        }

        /// <summary>
        /// Gibt an ob eine Fehler enthalten ist
        /// </summary>
        public bool HasException
        {
            get
            {
                return (from item in this where item.MessageType == MessageTypes.Exception select item).Count() > 0;
            }
        }

        #region IEnumerable<ErrorItem> Member

        /// <summary>
        /// Wird für eine ForEach auflistung verwendet
        /// </summary>
        /// <returns></returns>
        public IEnumerator<MessageItem> GetEnumerator()
        {
            return _list.GetEnumerator();
        }

        /// <summary>
        /// Wird für eine ForEach auflistung verwendet
        /// </summary>
        /// <returns></returns>
        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
        {
            return _list.GetEnumerator();
        }

        #endregion
    }
}
